package p27_返回值处理器;

import cn.hutool.core.map.MapUtil;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import p21_参数解析器.Person;

import java.util.Map;

/**
 * 该控制器，测试不同返回值的情况
 */
@Controller
public class MyController {
    //返回ModelAndView，会根据ModelAndView类的viewName属性找到模板文件地址，将模型数据渲染到模板文件里并最终产生一个html文件响应给浏览器
    public ModelAndView test1() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("view1");
        modelAndView.addObject("name", "zs");
        return modelAndView;
    }

    //根据配置文件中的前后缀，拼接成一个地址，根据地址找到模板文件，将模型数据渲染到模板文件里并最终产生一个html文件响应给浏览器
    public String test2() {
        return "test2";
    }

    //将返回值作为模型数据,这种方式没有视图名称，找不到视图名称会默认使用路径映射作为视图名称
    @ModelAttribute
    public Person test3() {
        Person p = new Person();
        p.setAge(114514);
        p.setName("哈哈哈");
        return p;
    }

    //同上，只不过省略了@ModelAttribute
    public Person test4() {
        Person p = new Person();
        p.setAge(22);
        p.setName("fsdfdsfsd");
        return p;
    }

    /**
     * 分水岭，上面的控制器方法需要走视图解析，下面控制器方法无需视图解析
     */

    //HttpEntity表示整个响应，泛型表示响应体的json数据是由什么对象转的
    public HttpEntity<Person> test5() {
        return new HttpEntity<>(new Person("ls", 33));
    }

    public HttpHeaders test6() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Type", "text/html");
        return httpHeaders;
    }

    @ResponseBody
    public Person test7() {
        Person p = new Person();
        p.setAge(33);
        p.setName("臧三");
        return p;
    }

}
